package com.zjdiepu.www.base.core;

import java.util.Iterator;
import java.util.List;

import javax.annotation.Resource;

import org.apache.commons.collections.CollectionUtils;
import org.springframework.dao.DataAccessException;
import org.springframework.data.redis.connection.RedisConnection;
import org.springframework.data.redis.core.RedisCallback;
import org.springframework.stereotype.Component;

import com.zjdiepu.www.commpent.RedisObjectClient;



/**
 * 属性转换:Model 转成  Vo属性
 * @author xiongxiaotun@126.com
 * @time 2017年3月23日 下午7:44:38
 * @since 1.0.0
 * @update
 * @param <M>
 * @param <V>
 */
@Component
public abstract class BaseMapper<M> {
	@Resource
	protected RedisObjectClient redisObjectClient;
	
	/**
	 * 部分属性从m中取值复制到v中
	 * @author xiongxiaotun@126.com
	 * @time 2017年3月23日 下午7:45:13
	 * @since 1.0.0
	 * @update
	 * @param v
	 * @param m
	 */
	public abstract void mapper(RedisConnection redisConnection, M m);
	
	
	/**
	 * 部分属性从m中取值复制到v中
	 * @author xiongxiaotun@126.com
	 * @time 2017年3月23日 下午7:45:13
	 * @since 1.0.0
	 * @update
	 * @param v
	 * @param m
	 */
	public void mapper(M m) {
		if(m == null) {
			return;
		}
		redisObjectClient.execute(new RedisCallback<Boolean>() {
			@Override
			public Boolean doInRedis(RedisConnection redisConnection) throws DataAccessException {
				mapper(redisConnection, m);
				return true;
			}
		});
	}
	
	/**
	 * 部分属性赋值展示字段
	 * @author xiongxiaotun@126.com
	 * @time 2017年3月23日 下午7:45:13
	 * @since 1.0.0
	 * @update
	 * @param m
	 */
	public void mapper(List<M> ms) {
		if(CollectionUtils.isEmpty(ms)) {
			return;
		}
		redisObjectClient.execute(new RedisCallback<Boolean>() {
			@Override
			public Boolean doInRedis(RedisConnection redisConnection) throws DataAccessException {
				Iterator<M> iterator = ms.iterator();
				while(iterator.hasNext()){
					M m = iterator.next();
					mapper(redisConnection, m);
				}
				return true;
			}
	   });
	}
}
